package com.hzw.saas.api.product;

import com.hzw.saas.api.product.dto.OrderCacheDto;
import com.hzw.saas.api.product.dto.OrderStatusDto;
import com.hzw.saas.api.product.dto.PayUrlDto;

/**
 * 支付业务接口
 *
 * @author zzl
 * @since 01/26/2021
 */
public interface IPayService {

    /**
     * 根据订单缓存生成二维码支付信息
     *
     * @param orderCacheDto 订单缓存
     * @return 二维码获取Form或URL
     */
    PayUrlDto qrCodeGenerate(OrderCacheDto orderCacheDto, int qrCodeWith);

    /**
     * 根据订单缓存生成收银台支付信息
     *
     * @param orderCacheDto 订单缓存
     * @return 收银台跳转Form或URL
     */
    PayUrlDto pagePayGenerate(OrderCacheDto orderCacheDto);

    /**
     * 完成支付，持久化处理订单信息
     *
     * @param payNo    内部支付号
     * @param payNoBiz 第三方支付号
     * @param payType  第三方支付类型
     * @param userId   操作人，为空则不判断权限
     * @return 生成的订单信息
     */
    OrderStatusDto pay(String payNo, String payNoBiz, Integer payType, String userId);

    /**
     * 查询支付状态
     *
     * @param payNo  内部支付号
     * @param userId 操作人，为空则不判断权限
     * @return 订单状态
     */
    OrderStatusDto queryPayStatus(String payNo, String userId);

}
